/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import Boundaries.FormCetakStruk;
import Boundaries.InternalFrame_Persewaan;
import Entities.Kendaraan;
import Entities.Servis;
import Entities.Sewa;
import TableModel.Kendaraan_List;
import TableModel.Kendaraan_TableModel;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
//import java.util.Date;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author Tea-Nose
 */
public class Registration_Controller extends JFrame {

    private static boolean closable;
    //method controller yang digunakan untuk mengecek apakah
    //field dalam form telah terisi semua atau belum

    public void cekRegistration(javax.swing.JInternalFrame internalFrame) throws SQLException {
        InternalFrame_Persewaan formReg = (InternalFrame_Persewaan) internalFrame;
        String no_Telp_pattern = "[0-9]{6,12}";
        if (formReg.tf_Sewa_noFaktur.getText().matches("")
                || formReg.tf_Sewa_namaPenyewa.getText().matches("")
                || formReg.ta_Sewa_AlamatPenyewa.getText().matches("")
                || formReg.tf_Sewa_TelpPenyewa.getText().matches("")
                || formReg.tf_Sewa_noPolisiKendaraan.getText().matches("")
                || formReg.tf_Sewa_statusKendaraan.getText().matches("")
                || formReg.tf_Sewa_UangSewa.getText().matches("")) {
            JOptionPane.showMessageDialog(null, "ERROR\nterdapat field yang belum terisi");
        } else if (!formReg.tf_Sewa_TelpPenyewa.getText().matches(no_Telp_pattern)) {
            JOptionPane.showMessageDialog(null, "Maaf penulisan no telp salah");
        } else {
            try {
                Sewa sewa = new Sewa();
                sewa.setNo_faktur(formReg.tf_Sewa_noFaktur.getText());
                sewa.setNama_penyewa(formReg.tf_Sewa_namaPenyewa.getText());
                sewa.setAlamat_penyewa(formReg.ta_Sewa_AlamatPenyewa.getText());
                sewa.setNo_telp_penyewa(formReg.tf_Sewa_TelpPenyewa.getText());
                SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
                String tanggalPinjam = dateFormat.format(formReg.dateChosser_Sewa_TanggalSewa.getDate());
                sewa.setTanggal_sewa(tanggalPinjam);
                String tanggalKembali = dateFormat.format(formReg.dateChosser_Sewa_TanggalKembali2.getDate());
                sewa.setTanggal_kembali(tanggalKembali);
                Kendaraan kend = new Kendaraan();
                sewa.setNo_Polisi(formReg.tf_Sewa_noPolisiKendaraan.getText());
                sewa.setUang_sewa(Long.parseLong(formReg.tf_Sewa_UangSewa.getText()));
                ;
                Kendaraan kendaraan = new Kendaraan();
                FormCetakStruk formCetakStruk = new FormCetakStruk(internalFrame, closable, sewa, kendaraan, this, formReg);
                formCetakStruk.setVisible(true);
                formCetakStruk.toFront();
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage());

            }

        }
    }

    public static void generateHargaSewa(javax.swing.JInternalFrame internalFrame) {
        InternalFrame_Persewaan formReg = (InternalFrame_Persewaan) internalFrame;
        if (formReg.dateChosser_Sewa_TanggalSewa.getDate().toString().equals("") || formReg.dateChosser_Sewa_TanggalKembali2.getDate().toString().equals("")) {
            JOptionPane.showMessageDialog(null, "Tanggal masih kosong");
        } else {
            try {
                // TODO add your handling code here:
                Kendaraan kendaraan = new Kendaraan();

                long jmlHariKembali = formReg.dateChosser_Sewa_TanggalKembali2.getDate().getTime() / (1000 * 60 * 60 * 24);
                long jmlHariSewa = formReg.dateChosser_Sewa_TanggalSewa.getDate().getTime() / (1000 * 60 * 60 * 24);
                long selisihHari = jmlHariKembali - jmlHariSewa;

                SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
                String tanggalSewa = dateFormat.format(formReg.dateChosser_Sewa_TanggalSewa.getDate());
                String tanggalKembali = dateFormat.format(formReg.dateChosser_Sewa_TanggalKembali2.getDate());

                int tglSewa = Integer.parseInt(tanggalSewa.substring(0, 2));
                int bulanSewa = Integer.parseInt(tanggalSewa.substring(3, 5));
                int tahunSewa = Integer.parseInt(tanggalSewa.substring(6, 10));

                int tglKembali = Integer.parseInt(tanggalKembali.substring(0, 2));
                int bulanKembali = Integer.parseInt(tanggalKembali.substring(3, 5));
                int tahunKembali = Integer.parseInt(tanggalKembali.substring(6, 10));

                Servis servis = new Servis();
                int tglServis = Integer.parseInt(formReg.jTable1.getValueAt(0, 3).toString().substring(8, 10));
                int bulanServis = Integer.parseInt(formReg.jTable1.getValueAt(0, 3).toString().substring(5, 7));
                int tahunServis = Integer.parseInt(formReg.jTable1.getValueAt(0, 3).toString().substring(0, 4));

                GregorianCalendar tglSekarang = new GregorianCalendar();
                String tgl_Skrng = dateFormat.format(tglSekarang.getTime());
                long hariSekarang = tglSekarang.getTime().getTime() / (1000 * 60 * 60 * 24);

                int tglSekarang2 = Integer.parseInt(tgl_Skrng.substring(0, 2));
                int bulanSekarang = Integer.parseInt(tgl_Skrng.substring(3, 5));
                int tahunSekarang = Integer.parseInt(tgl_Skrng.substring(6, 10));


                if ((bulanSewa <= bulanSekarang && tahunSewa <= tahunSekarang && tglSewa < tglSekarang2)
                        || (tahunSewa<tahunSekarang) || (bulanSewa<bulanSekarang && tahunSewa<=tahunSekarang)) {
                    JOptionPane.showMessageDialog(null, "Tanggal sewa tidak bisa kurang dari tanggal sekarang");
                } else if ((jmlHariSewa - hariSekarang) > 3) {
                    JOptionPane.showMessageDialog(null, "Maaf batas pemesanan adalah hanya untuk 3 hari kedepan");
                } else if (selisihHari < 0) {
                    JOptionPane.showMessageDialog(null, "Tanggal kembali tidak bisa sebelum hari sewa...");
                } else if ((tglSewa == tglServis && bulanSewa == bulanServis && tahunSewa == tahunServis)||(tglKembali == tglServis && bulanKembali == bulanServis && tahunKembali == tahunServis)) {
                    JOptionPane.showMessageDialog(null, "Maaf kendaraan tidak dapat disewa karena akan diservis");
                } else if ((tglSewa < tglServis && bulanSewa <= bulanServis && tahunSewa <= tahunServis && tglKembali >= tglServis && bulanKembali >= bulanServis && tahunKembali >= tahunServis)
                        || (tglSewa < tglServis && bulanSewa <= bulanServis && tahunSewa <= tahunServis && bulanKembali > bulanServis && tahunKembali >= tahunServis)
                        || (tahunKembali > tahunServis)||(bulanKembali > bulanServis && tahunKembali >= tahunServis)) {
                    JOptionPane.showMessageDialog(null, "Maaf kendaraan tidak dapat disewa karena akan diservis");
                } else if (selisihHari == 0) {
                    formReg.tf_Sewa_UangSewa.setText(String.valueOf(1 * kendaraan.hargaSewaPerHariKendaraan(formReg.tf_Sewa_noPolisiKendaraan.getText())));
                } else {
                    formReg.tf_Sewa_UangSewa.setText(String.valueOf((int) selisihHari * kendaraan.hargaSewaPerHariKendaraan(formReg.tf_Sewa_noPolisiKendaraan.getText())));
                }
            } catch (SQLException ex) {
                Logger.getLogger(InternalFrame_Persewaan.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void generate_Table_Model(JInternalFrame internalFrame) {
        try {
            InternalFrame_Persewaan formReg = (InternalFrame_Persewaan) internalFrame;
            formReg.jTable1.setVisible(true);
            List<Kendaraan> kendaraans = Kendaraan_List.getKendaraanList().getKendaraanDanTanggalServis(formReg.ComboBox_Sewa_MerkKendaraan.getSelectedItem().toString());
            
            Kendaraan_TableModel kendaraan_table = new Kendaraan_TableModel(kendaraans);
            formReg.jTable1.setModel(kendaraan_table);
            
        } catch (SQLException ex) {
            Logger.getLogger(Registration_Controller.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void generateDataFromTable(JInternalFrame internalFrame) {
        InternalFrame_Persewaan formReg = (InternalFrame_Persewaan) internalFrame;
        int row = formReg.jTable1.getSelectedRow();
        formReg.tf_Sewa_noPolisiKendaraan.setEnabled(true);
        formReg.tf_Sewa_noPolisiKendaraan.setText(formReg.jTable1.getValueAt(row, 0).toString());
        formReg.tf_Sewa_statusKendaraan.setEnabled(true);
        formReg.tf_Sewa_statusKendaraan.setText("Siap Sewa");
        if (formReg.tf_Sewa_statusKendaraan.getText().equalsIgnoreCase("Siap Sewa")) {
            formReg.dateChosser_Sewa_TanggalSewa.setEnabled(true);
            formReg.dateChosser_Sewa_TanggalKembali2.setEnabled(true);
            formReg.button_GenerateHarga.setEnabled(true);
            formReg.tf_Sewa_UangSewa.setEnabled(true);
            formReg.button_Sewa_Ok.setEnabled(true);
        }
    }

    public void resetAllField(JInternalFrame internalFrame) {
        InternalFrame_Persewaan formReg = (InternalFrame_Persewaan) internalFrame;

        formReg.tf_Sewa_namaPenyewa.setText("");
        formReg.ta_Sewa_AlamatPenyewa.setText("");
        formReg.tf_Sewa_TelpPenyewa.setText("");

    }
}
